/**
 * 图片压缩
 *
 * 需要安装以下依赖:
 * pnpm install imagemin imagemin-gifsicle imagemin-jpegtran imagemin-optipng imagemin-svgo imagemin-webp
 */
const fs = require('fs');
const path = require('path');
const imagemin = require('imagemin');
const imageminJpegtran = require('imagemin-jpegtran');
const imageminOptipng = require('imagemin-optipng');
const imageminGifsicle = require('imagemin-gifsicle');
// const imageminSvgo = require('imagemin-svgo');
const imageminWebp = require('imagemin-webp');
const toolsNode = require('../libs/tools-node');

// 获取传递给脚本的参数（排除前两个默认参数）
const args = process.argv.slice(2);
let from = args[0];
let toDirRoot = path.dirname(from);
let toName = path.basename(from);
let to = path.join(toDirRoot, `compress_${toName}`);

async function compressImage(inputPath, outputPath) {
  // 根据输入文件扩展名自动选择插件
  let plugins = [];
  let ext = path.extname(from).toLowerCase();
  switch (ext) {
    case '.jpg':
    case '.jpeg':
      plugins.push(imageminJpegtran({ progressive: true })); // 渐进式压缩
      break;
    case '.png':
      // plugins.push(imageminOptipng({ optimizationLevel: 7 })); // 最高优化等级（耗时较长）
      plugins.push(imageminOptipng({ optimizationLevel: 3 }));
      break;
    case '.gif':
      plugins.push(imageminGifsicle({ optimizationLevel: 3 }));
      break;
    case '.svg':
      // plugins.push(imageminSvgo());
      break;
    case '.webp':
      // 若需进一步压缩 WebP，可保留此插件
      plugins.push(imageminWebp());
      break;
    default:
      throw new Error('不支持的图片格式');
  }
  // 读取图片内容
  const buffer = fs.readFileSync(inputPath);
  // 压缩图片
  const compressedBuffer = await imagemin.buffer(buffer, { plugins: plugins });
  // 保存压缩后的文件
  toolsNode.writeFileSync(outputPath, compressedBuffer);
  console.log(`成功压缩 ${inputPath} → ${outputPath}`);
}

compressImage(from, to);
